package com.cskaoyan.javase.oop3._1interface._5example.dao.impl;

import com.cskaoyan.javase.oop3._1interface._5example.dao.ProductDao;
import com.cskaoyan.javase.oop3._1interface._5example.model.Product;
import com.cskaoyan.javase.oop3._1interface._5example.model.ProductData;

/**
 * 该类下完成对商品的数据处理具体代码
 * @since 11:48
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class ProductDaoImpl implements ProductDao {
    // dao层要想完成数据处理,必须依赖于数据源,而且只有dao层才能依赖数据源
    private Product[] productData = ProductData.PRODUCTS;

    /**
     * 仅装有商品对象的数组返回
     * @return com.cskaoyan.javase.oop3._1interface._5example.model.Product[]
     * @author wuguidong@cskaoyan.onaliyun.com
     * @since 2022/07/16 11:57
     */
    @Override
    public Product[] getAllRealProduct() {
        // 将数组中的null元素过滤掉,真正意义上的删除数组中的元素
        // count是null元素的个数
        int count = 0;
        for (Product product : productData) {
            if (product == null) {
                count++;
            }
        }
        // 新数组长度 = 老数组长度 - null元素个数
        Product[] result = new Product[productData.length - count];

        // 遍历老数组,将不是null的元素复制到新数组
        // 新数组的下标
        int newIndex = 0;
        for (Product product : productData) {
            if (product == null) {
                continue;
            }
            result[newIndex] = product;
            newIndex++;
        }
        return result;
    }
}
